﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Infrastructure.Model.SideCar;

namespace Infrastructure.Extensions
{
    /// <summary>
    /// SideCarException 自定义的异常类，用于处理在执行 SideCar 过程中出现的错误。
    /// 它能够存储执行阶段（Before 或 After）、动作名称以及详细的错误消息，帮助追踪和调试 SideCar 过程中的异常。
    /// </summary>
    public class SideCarException : Exception
    {
        // 保存当前异常所属的执行阶段（Before, After）
        public readonly SideCarOrder Order;

        // 保存异常信息的消息内容
        public readonly string Msg;

        // 保存出错的动作名称（ActionName）
        public readonly string ActionName;

        /// <summary>
        /// 初始化一个新的 SideCarException 实例。
        /// </summary>
        /// <param name="Order">表示异常发生的执行阶段（例如 Before 或 After）。</param>
        /// <param name="ActionName">表示发生异常的动作名称。</param>
        /// <param name="Message">异常消息内容。</param>
        /// <param name="inner">内部异常（可选），如果存在则传递给基类 Exception。</param>
        public SideCarException(SideCarOrder Order, string ActionName, string Message, Exception inner = null)
            : base(Message, inner)
        {
            this.Order = Order;  // 初始化执行阶段
            Msg = Message;       // 初始化异常消息
            this.ActionName = ActionName;  // 初始化动作名称
        }

        /// <summary>
        /// 重写 ToString 方法，返回 SideCarException 的字符串表示形式，包含动作名称、执行阶段和异常消息。
        /// </summary>
        /// <returns>返回格式化的异常信息字符串。</returns>
        public override string ToString()
        {
            return $"SideCarEx[{ActionName}][{Order}]:" + Msg;  // 返回异常的字符串描述
        }
    }

}
